/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rna;

/**
 *
 * @author thay
 */
public class Neuronio {

 //   public double entradas[];
    public double pesos[];
    public double saida = 0.0;
    private double bias;
    public Camada camada;
    public double Isaida[]; // Vetor com um valor para cada entrada do neuronio;
    public double delta;

    /* Construtor */
    public Neuronio(int num) {

        bias = -1.0;
     //   entradas = new double[num];
        pesos = new double[num+1];  // Pesos para todas as entradas mais o bias;
        this.geraPesos(num+1);      // Preenche o vetor de pesos com valores aleatorios;
    }

    /* Funcao de ativacao SIGMOIDE */
    public double f(double num) {
        return (1/(1 + Math.exp(-0.5 * num)));
       // return num+1;
    }

    public void setPesos(double pesosEntrada[]){
        pesos = pesosEntrada;
    }

    public void processar() {

        double x = somatorio();
        saida = f(x);
    }

    public double somatorio() {

        double soma = 0;
// Cada indice do Isaida equivale a um valor na entrada de um neuronio;
        Isaida = new double[camada.entradas.length+1];  // Mais um, devido ao bias;
        for(int i = 0; i < camada.entradas.length; i++) {
     
            Isaida[i] = camada.entradas[i]*pesos[i];
            soma += camada.entradas[i] * pesos[i];
        }
        Isaida[Isaida.length-1] = bias * pesos[pesos.length-1];
        soma += bias * pesos[pesos.length-1];
        
        return soma;
    }

    public void setPeso(int entrada, double valor){
        pesos[entrada] = valor;
    }

    public double getPeso(int entrada){
        return pesos[entrada];
    }

    private void geraPesos(int num)
    {
        for(int i = 0; i < num; i++)
        {
            this.setPeso(i, Math.random() * 0.5);
        }
    }
}
